@时光机
2年前 提问
1个回答

sql的注入种类有哪些

delay
2年前

sql的十种注入种类:

  • 可显注入

    攻击者可以直接在当前界面内容中获取想要获得的内容。

  • 报错注入

    数据库查询返回结果并没有在页面中显示,但是应用程序将数据库报错信息打印到了页面中,所以攻击者可以构造数据库报错语句,从报错信息中获取想要获得的内容。

  • 盲注

    数据库查询结果无法从直观页面中获取,攻击者通过使用数据库逻辑或使数据库库执行延时等方法获取想要获得的内容。

  • 时间盲注

    常用函数 sleep()

    分割函数 substr、substring、left

    分割函数编码后可不用引号,ascii() hex()

    一般时间盲注我们还需要使用条件判断函数

    if(expre1,expre2,expre3)

    当 expre1 为 true 时,返回 expre2,false 时,返回 expre3

  • 布尔盲注

    这种注入会出现在 注册、ip头、留言板等等需要写入数据的地方,如用sqlmap会产生大量垃圾数据。尝试性插入、引号、双引号、转义符 \ 让语句不能正常执行,然后如果插入失败,更新失败,然后深入测试确定是否存在注入。

  • 二次注入:

    sql语句的变量并不是直接传入的变量,而是通过其它的方式保存到了数据库,形成二次注入。没有单引号的sql语句中,进行16进制编码,这样就不会带有单引号。

  • 宽字节注入:

    字符注入的时候我们需要逃逸单引号,但是php提供了魔术引号开关magic_quotes_gpc和addslashes(),iconv()函数作为防御,特点是自动给传入的参数如单引号,双引号,反斜杠,%00前面加一个反斜杠,进行转义,避免单引号进行逃逸。单引号转义为 ‘ , mysql 会将 \ 编码为 %5c ,宽字节中两个字节代表一个汉字,所以把 %df 加上 %5c 就变成了一个汉字“運”,从而绕过转义。如果数据库是GBK格式而非默认的UTF-8格式,则我们利用两个url编码是一个汉字的特点,组合一个汉字从而解决”\“问题,完成单引号的逃逸。

  • 数字型注入

    当我们访问页面时经常会出现http:xxx.admin.com?id=1这种形式的url,这个时候我们输入and 1=1与and 1=2,进行判定看是否会出现and 1=1回显正常,and 1=2回显不正常的情况。如果出现了我们一般就认为这里存在注入,并且是数字型注入。如果没有出现那么并不能排查这里没有注入,只是排除这里不存在数字型的注入。

  • 字符型注入

    url后输入’ and 1=1 and ‘1’=’1,’ and 1=2 and ‘1’=’1。看是否会出现报错的现象。如果存在我们可以进一步的闭合我们的语句。

  • http头部注入

    user-agent:判定用户使用的操作系统,以及使用的浏览器的版本。

    cookie:判定用户的身份,进行session跟踪可以存储在用户本地终端上的数据,简单理解为用户的一张身份辨别卡。

    x-forwarded-for:是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。

    client-ip: 数据库保存客户端IP的参数。

    rerferer:浏览器向web端表明自己从哪个连接而来。

    host:客户端指定自己想访问的WEB服务器的域名/IP 地址和端口号。